#ifndef AUTOMATION_H
#define AUTOMATION_H

#include <QtCore>
#include <QtNetwork>
//通信包格式为4字节大端代表长度,其他是json字符串

class IAction;

class Automation : public QTcpServer
{
public:
    Automation();
    ~Automation();
    bool init();
protected:
    void incomingInit();
    void assemblePack();
    void handleJsonObject(const QJsonObject& jobj);

    void doChain(const QJsonObject& jobj);
    void doStart();
    void doPause();
    void doStop();
    void doResume();
    void progress();

    bool nextAccount();
private:
    QTcpSocket *onlyServe_;
    QByteArray packetCache_;

    enum State{
        Stopped,Running,Paused
    } state_;
    IAction* beginning_; //最开始的那个action
    IAction* current_;   //总是指向未完成执行的那个（出错的那个，继续执行的下一个，已完成未NULL)
    int curParamLine_;   //当前参数行. 未使用.
    QJsonArray paramsInput_;  //输入参数.通常value是object包含若干内容.

    QMap<QString, IAction*> idAction_;  //id与action的对应.
    QList<IAction*> paramReplaceAction_;  //需要替换参数的action.
};

#endif // AUTOMATION_H
